Spring Boot এবং JPA/Hibernate একসাথে কাজ করলে ডেটাবেস পরিচালনার কাজ অনেক সহজ ও দ্রুত হয়। Spring Boot স্বয়ংক্রিয়ভাবে Hibernate এর কনফিগারেশন এবং সেটআপ পরিচালনা করে, এবং JPA (Java Persistence API) ব্যবহার করে ডেটাবেসের সাথে যোগাযোগ তৈরি করে। Hibernate হল JPA এর একটি বাস্তবায়ন, যা ডেটাবেস অপারেশনগুলো (CRUD) সহজ এবং কার্যকরীভাবে সম্পাদন করে।
এখানে আমরা বিস্তারিতভাবে আলোচনা করব কিভাবে Spring Boot এর সাথে JPA/Hibernate কাজ করে।
১. Spring Boot এবং JPA/Hibernate এর সংযোগ
Spring Boot অ্যাপ্লিকেশন তৈরি করার সময় Spring Data JPA ব্যবহার করা হয়, যা Hibernate কে JPA-র মাধ্যমে ডেটাবেস অপারেশন পরিচালনা করতে সহায়তা করে। Spring Boot এর auto-configuration ফিচার ব্যবহার করে, JPA এবং Hibernate দ্রুত কনফিগার করা যায় এবং Spring Boot নিজেই ডেটাবেস সংযোগ স্থাপন করে।
Spring Boot ডিপেনডেন্সি:
Spring Boot অ্যাপ্লিকেশনকে Hibernate এবং JPA এর সাথে ইন্টিগ্রেট করতে প্রথমেই spring-boot-starter-data-jpa ডিপেনডেন্সি অন্তর্ভুক্ত করতে হয়।
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
এখানে H2 ডেটাবেস ব্যবহার করা হয়েছে, তবে আপনি অন্যান্য ডেটাবেস যেমন MySQL বা PostgreSQLও ব্যবহার করতে পারেন।
application.properties কনফিগারেশন উদাহরণ:
# ডেটাবেস কানেকশন সেটিংস
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
# JPA কনফিগারেশন
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
এখানে spring.jpa.hibernate.ddl-auto=update প্রপার্টি দিয়ে Hibernate কে বলছে স্কিমা আপডেট করার জন্য। spring.jpa.show-sql=true কনফিগারেশন দিয়ে SQL কোয়েরি কনসোলে দেখতে পারবেন।
২. JPA Entity Class তৈরি করা
JPA Entity হল সেই ক্লাস যা ডেটাবেস টেবিলের সাথে ম্যাপ করা হয়। একটি Entity ক্লাসের মধ্যে টেবিলের সব কলামগুলির জন্য প্রপার্টি (field) থাকে এবং এই প্রপার্টিগুলির মাধ্যমে ডেটাবেসের সাথে যোগাযোগ করা হয়।
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
// Getters and Setters
}
এখানে @Entity এনোটেশন দ্বারা User ক্লাসটিকে একটি JPA Entity হিসেবে চিহ্নিত করা হয়েছে। @Id প্রপার্টি টেবিলের প্রাইমারি কী হিসেবে কাজ করবে এবং @GeneratedValue প্রপার্টি স্বয়ংক্রিয়ভাবে আইডি জেনারেট করবে।
৩. JPA Repository Interface তৈরি করা
JPA রেপোজিটরি একটি ইন্টারফেস যা JpaRepository বা CrudRepository ইন্টারফেসকে এক্সটেন্ড করে। এটি ডেটাবেস অপারেশনের জন্য প্রয়োজনীয় মেথডগুলো প্রদান করে, যেমন: save(), findById(), delete(), ইত্যাদি।
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
User findByName(String name);
}
এখানে UserRepository ইন্টারফেসটি JpaRepository থেকে এক্সটেন্ড করা হয়েছে এবং User Entity এর জন্য CRUD অপারেশন সরবরাহ করবে। findByName মেথডটি একটি কাস্টম কুয়েরি যা নামের মাধ্যমে ইউজার খুঁজে বের করবে।
৪. Service Layer তৈরি করা
Service layer অ্যাপ্লিকেশনের বিজনেস লজিকের জন্য ব্যবহৃত হয়। এখানে UserService ক্লাসটি তৈরি করা হয়েছে যা UserRepository ইন্টারফেসের মেথডগুলির সাথে কাজ করবে।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public User saveUser(User user) {
return userRepository.save(user);
}
public List<User> getAllUsers() {
return userRepository.findAll();
}
public User getUserByName(String name) {
return userRepository.findByName(name);
}
}
এখানে UserService ক্লাসে UserRepository ইনজেক্ট করা হয়েছে এবং ইউজার সেভ, ফেচ, এবং কাস্টম অনুসন্ধান কার্যক্রম তৈরি করা হয়েছে।
৫. Controller তৈরি করা
Spring Boot অ্যাপ্লিকেশন তৈরি করতে Controller-এ RESTful API বা ওয়েব সার্ভিস তৈরি করা হয়। এখানে একটি সিম্পল UserController ক্লাস তৈরি করা হয়েছে যা UserService এর মেথডগুলো কল করে।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@PostMapping
public User addUser(@RequestBody User user) {
return userService.saveUser(user);
}
@GetMapping
public List<User> getAllUsers() {
return userService.getAllUsers();
}
@GetMapping("/{name}")
public User getUserByName(@PathVariable String name) {
return userService.getUserByName(name);
}
}
এখানে:
@PostMappingমেথডটি নতুন ইউজার অ্যাড করার জন্য।@GetMappingমেথডগুলি ইউজারের তথ্য ফেচ করার জন্য ব্যবহার করা হয়েছে।
৬. ডেটাবেসের সাথে ইন্টিগ্রেশন
Spring Boot অ্যাপ্লিকেশনটি চালানোর পর, আপনি ডেটাবেসের মধ্যে ইউজার টেবিল তৈরি করতে পারেন এবং বিভিন্ন CRUD অপারেশন চালাতে পারেন। @SpringBootTest বা @DataJpaTest ব্যবহার করে আপনি ইনটিগ্রেশন টেস্টও করতে পারবেন।
সারাংশ
Spring Boot এবং JPA/Hibernate একটি শক্তিশালী কম্বিনেশন যা ডেটাবেস অপারেশনগুলো সহজ করে তোলে। Spring Boot স্বয়ংক্রিয়ভাবে Hibernate কনফিগারেশন এবং ডেটাবেসের সাথে সংযোগ স্থাপন করে, JPA Entity ক্লাস ও Repository তৈরি করার মাধ্যমে CRUD অপারেশনকে সহজ করে দেয়। Hibernate ডেটাবেসের টেবিলের সাথে অবজেক্ট ম্যাপিং করে, যা ডেভেলপারদের জন্য ডেটাবেস অ্যাক্সেস খুব সহজ ও কার্যকরী করে তোলে।
Read more